#include "ai.h"
#include "dht11.h"
#include "Tick.h"

enum e_AI_STATE {
    AI_WAIT_INIT = 0,
    AI_DO_START,
    AI_DO_NOTHING,
    AI_DO_ASK_SENSOR,
    AI_DO_WAIT_SENSOR,
    AI_DO_GUI_REFRESH
};

enum e_AI_STATE AI_STATE = 0;

unsigned int ai_next_step_time = 0;

extern unsigned char dht11_temperature;
extern unsigned char dht11_humidity;

void AITask( void ) {
    switch ( AI_STATE ) {
        case AI_WAIT_INIT:
            // Надо секунду подождать как минимум после подачи напряжения на сенсор
            if ( TickGet() > 2*TICKS_PER_SECOND ) {
                AI_STATE = AI_DO_START;
            }
            break;
        case AI_DO_START:
            // Проводим инициализацию
            //SensorInit();
            ai_next_step_time = TickGet() + 30*TICKS_PER_SECOND;
            AI_STATE = AI_DO_NOTHING;
            break;
        case AI_DO_NOTHING:
            // Ничего не делаем, но надо как-то отчитать 30ть секунд и начать запрос сенсора
            if ( TickGet() > ai_next_step_time ) {
                AI_STATE = AI_DO_ASK_SENSOR;
            }
            break;
        case AI_DO_ASK_SENSOR:
            SensorStartAction();
            AI_STATE = AI_DO_WAIT_SENSOR;
            break;
        case AI_DO_WAIT_SENSOR:
            if ( SensorGetState() == SEN_DO_NOTHING ) { // Общение с сенсором закончилось успешно
                unsigned char ok_data[5];
                GetLastData(ok_data);
                dht11_temperature = ok_data[2];
                dht11_humidity = ok_data[0];

                AI_STATE = AI_DO_START;
            }
            else if ( SensorGetState() == SEN_ERR_STATE ) { // Общение с сенсором закончилось неудачно
                dht11_temperature = 0;
                dht11_humidity = SensorGetErrCode();

                AI_STATE = AI_DO_START;
            }
            else { // Общение с сенсором в процессе
                // надо не зациклиться на этом месте
            }
            break;

    }
}